home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / usb / midi.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  3KB  |  113 lines

  1. /*
  2.  * <linux/usb/midi.h> -- USB MIDI definitions.
  3.  *
  4.  * Copyright (C) 2006 Thumtronics Pty Ltd.
  5.  * Developed for Thumtronics by Grey Innovation
  6.  * Ben Williamson <ben.williamson@greyinnovation.com>
  7.  *
  8.  * This software is distributed under the terms of the GNU General Public
  9.  * License ("GPL") version 2, as published by the Free Software Foundation.
  10.  *
  11.  * This file holds USB constants and structures defined
  12.  * by the USB Device Class Definition for MIDI Devices.
  13.  * Comments below reference relevant sections of that document:
  14.  *
  15.  * http://www.usb.org/developers/devclass_docs/midi10.pdf
  16.  */
  17.  
  18. #ifndef __LINUX_USB_MIDI_H
  19. #define __LINUX_USB_MIDI_H
  20.  
  21. #include <linux/types.h>
  22.  
  23. /* A.1  MS Class-Specific Interface Descriptor Subtypes */
  24. #define USB_MS_HEADER        0x01
  25. #define USB_MS_MIDI_IN_JACK    0x02
  26. #define USB_MS_MIDI_OUT_JACK    0x03
  27. #define USB_MS_ELEMENT        0x04
  28.  
  29. /* A.2  MS Class-Specific Endpoint Descriptor Subtypes */
  30. #define USB_MS_GENERAL        0x01
  31.  
  32. /* A.3  MS MIDI IN and OUT Jack Types */
  33. #define USB_MS_EMBEDDED        0x01
  34. #define USB_MS_EXTERNAL        0x02
  35.  
  36. /* 6.1.2.1  Class-Specific MS Interface Header Descriptor */
  37. struct usb_ms_header_descriptor {
  38.     __u8  bLength;
  39.     __u8  bDescriptorType;
  40.     __u8  bDescriptorSubtype;
  41.     __le16 bcdMSC;
  42.     __le16 wTotalLength;
  43. } __attribute__ ((packed));
  44.  
  45. #define USB_DT_MS_HEADER_SIZE    7
  46.  
  47. /* 6.1.2.2  MIDI IN Jack Descriptor */
  48. struct usb_midi_in_jack_descriptor {
  49.     __u8  bLength;
  50.     __u8  bDescriptorType;        /* USB_DT_CS_INTERFACE */
  51.     __u8  bDescriptorSubtype;    /* USB_MS_MIDI_IN_JACK */
  52.     __u8  bJackType;        /* USB_MS_EMBEDDED/EXTERNAL */
  53.     __u8  bJackID;
  54.     __u8  iJack;
  55. } __attribute__ ((packed));
  56.  
  57. #define USB_DT_MIDI_IN_SIZE    6
  58.  
  59. struct usb_midi_source_pin {
  60.     __u8  baSourceID;
  61.     __u8  baSourcePin;
  62. } __attribute__ ((packed));
  63.  
  64. /* 6.1.2.3  MIDI OUT Jack Descriptor */
  65. struct usb_midi_out_jack_descriptor {
  66.     __u8  bLength;
  67.     __u8  bDescriptorType;        /* USB_DT_CS_INTERFACE */
  68.     __u8  bDescriptorSubtype;    /* USB_MS_MIDI_OUT_JACK */
  69.     __u8  bJackType;        /* USB_MS_EMBEDDED/EXTERNAL */
  70.     __u8  bJackID;
  71.     __u8  bNrInputPins;        /* p */
  72.     struct usb_midi_source_pin pins[]; /* [p] */
  73.     /*__u8  iJack;  -- ommitted due to variable-sized pins[] */
  74. } __attribute__ ((packed));
  75.  
  76. #define USB_DT_MIDI_OUT_SIZE(p)    (7 + 2 * (p))
  77.  
  78. /* As above, but more useful for defining your own descriptors: */
  79. #define DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(p)            \
  80. struct usb_midi_out_jack_descriptor_##p {            \
  81.     __u8  bLength;                        \
  82.     __u8  bDescriptorType;                    \
  83.     __u8  bDescriptorSubtype;                \
  84.     __u8  bJackType;                    \
  85.     __u8  bJackID;                        \
  86.     __u8  bNrInputPins;                    \
  87.     struct usb_midi_source_pin pins[p];            \
  88.     __u8  iJack;                        \
  89. } __attribute__ ((packed))
  90.  
  91. /* 6.2.2  Class-Specific MS Bulk Data Endpoint Descriptor */
  92. struct usb_ms_endpoint_descriptor {
  93.     __u8  bLength;            /* 4+n */
  94.     __u8  bDescriptorType;        /* USB_DT_CS_ENDPOINT */
  95.     __u8  bDescriptorSubtype;    /* USB_MS_GENERAL */
  96.     __u8  bNumEmbMIDIJack;        /* n */
  97.     __u8  baAssocJackID[];        /* [n] */
  98. } __attribute__ ((packed));
  99.  
  100. #define USB_DT_MS_ENDPOINT_SIZE(n)    (4 + (n))
  101.  
  102. /* As above, but more useful for defining your own descriptors: */
  103. #define DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(n)            \
  104. struct usb_ms_endpoint_descriptor_##n {                \
  105.     __u8  bLength;                        \
  106.     __u8  bDescriptorType;                    \
  107.     __u8  bDescriptorSubtype;                \
  108.     __u8  bNumEmbMIDIJack;                    \
  109.     __u8  baAssocJackID[n];                    \
  110. } __attribute__ ((packed))
  111.  
  112. #endif /* __LINUX_USB_MIDI_H */
  113.